/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.qp.smsmarketing.view.mbean;

import com.qp.smsmarketing.view.mbean.abstractmbean.AbstractMBean;
import com.qp.smsmarketing.dao.GrupoDAO;
import com.qp.smsmarketing.entity.Grupo;
import com.qp.smsmarketing.listagem.ListagemGrupo;
import com.qp.smsmarketing.view.View;
import com.qp.smsmarketing.view.ViewGrupo;
import java.awt.Component;
import java.util.Iterator;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTable;

/**
 *
 * @author waldenilson
 */
public class GrupoMBean extends AbstractMBean {

    private ViewGrupo vGrupo;
    private GrupoDAO gdao = new GrupoDAO();
    private Grupo cadGrupo = new Grupo();
    private List<Grupo> lista;
    private int registros;

    public void exibirView(ViewGrupo vg) {
        buscarCrudGrupo(vg);
        vg.getBt_novo().setEnabled(false);
        vg.getCb_ativo().setSelected(true);
        carregarView(vGrupo, vg);
    }

    public void novoObjeto(ViewGrupo vg) {
        vGrupo = vg;
        setCadGrupo(new Grupo());
        vGrupo.getTf_nome().setText("");
        vGrupo.getTf_desc().setText("");
        vGrupo.getCb_ativo().setSelected(true);
        vGrupo.getBt_novo().setEnabled(false);
    }

    public String removerObjeto(ViewGrupo vg) {
        vGrupo = vg;
        String retorno = "error";
        // pegar os registros selecionados
        int[] i = vGrupo.getTableGrupo().getSelectedRows();
        buscarCrudGrupo(vg);
        for (int reg : i) {
            if (vGrupo.getTableGrupo().getValueAt(reg, 0) != null) {
                // remover registros
                JOptionPane.showMessageDialog(null, vGrupo.getTableGrupo().getValueAt(reg, 1));
            }
        }

        //dao para remover os selecionados

        return retorno;
    }

    public String salvarObjeto(ViewGrupo vg) {
        vGrupo = vg;
        String retorno = "error";
        getCadGrupo().setNomeGrupo(vGrupo.getTf_nome().getText());
        getCadGrupo().setDescGrupo(vGrupo.getTf_desc().getText());
        getCadGrupo().setStatusGrupo(vGrupo.getCb_ativo().isSelected());

        // verificações
        if (getCadGrupo().getNomeGrupo().length() < 3) {
            retorno = "verify";
            return retorno;
        }

        if (getCadGrupo().getIdGrupo() == null) {
            //JOptionPane.showMessageDialog(null,"salvar");
            if (gdao.salvarObj(getCadGrupo())) {
                retorno = "ok";
            }
        } else {
            //JOptionPane.showMessageDialog(null,"alterar");
            if (gdao.atualizarDados(getCadGrupo())) {
                retorno = "ok";
            }
        }
        return retorno;
    }

    public void buscarCrudGrupo(Component vg) {
        vGrupo = (ViewGrupo) vg;
        lista = gdao.buscarTodos();
        int x = 0;
        for (Grupo grupo : lista) {
            vGrupo.getTableGrupo().setValueAt(grupo.getIdGrupo().toString(), x, 0);
            vGrupo.getTableGrupo().setValueAt(grupo.getNomeGrupo(), x, 1);
            vGrupo.getTableGrupo().setValueAt(grupo.getDescGrupo(), x, 2);
            vGrupo.getTableGrupo().setValueAt(grupo.getStatusGrupo(), x, 3);
            x++;
        }
        setRegistros(x);
        vGrupo.getBt_novo().setEnabled(true);
        //vGrupo.setTableGrupo( ocultarColuna(vGrupo.getTableGrupo(),3) );
    }

    public void buscarCrudGrupoAbas(View vg) {
        lista = gdao.buscarTodos();
        int x = 0;
        for (Grupo grupo : lista) {
            vg.getTbGrupo().setValueAt(grupo.getIdGrupo().toString(), x, 0);
            vg.getTbGrupo().setValueAt(grupo.getNomeGrupo(), x, 1);
            vg.getTbGrupo().setValueAt(grupo.getGrupoContatoList().size(), x, 2);
            x++;
        }
        vg.getLbTotalGrupo().setText("Total encontrado.: " + x);
    }

    public void selecionarRegistro(ViewGrupo v) {
        vGrupo = v;
        int i = vGrupo.getTableGrupo().getSelectedRow();
        //buscarCrudGrupo(v);
        setRegistros(gdao.buscarTodos().size());
        if ((i + 1) <= getRegistros()) {
            getCadGrupo().setNomeGrupo(vGrupo.getTableGrupo().getValueAt(i, 1).toString());
            getCadGrupo().setIdGrupo(Integer.parseInt(vGrupo.getTableGrupo().getValueAt(i, 0).toString()));

            // descricao
            if (vGrupo.getTableGrupo().getValueAt(i, 1) != null) {
                getCadGrupo().setDescGrupo(vGrupo.getTableGrupo().getValueAt(i, 2).toString());
            } else {
                getCadGrupo().setDescGrupo("");
            }
            // status
            if (vGrupo.getTableGrupo().getValueAt(i, 3) == null) {
                getCadGrupo().setStatusGrupo(false);
            } else {
                getCadGrupo().setStatusGrupo((Boolean) vGrupo.getTableGrupo().getValueAt(i, 3));
            }

            vGrupo.getTf_nome().setText(getCadGrupo().getNomeGrupo());
            vGrupo.getTf_desc().setText(getCadGrupo().getDescGrupo());
            vGrupo.getCb_ativo().setSelected(getCadGrupo().getStatusGrupo());
        } else {
            novoObjeto(v);
        }
    }

    /**
     * @return the cadGrupo
     */
    public Grupo getCadGrupo() {
        return cadGrupo;
    }

    /**
     * @param cadGrupo the cadGrupo to set
     */
    public void setCadGrupo(Grupo cadGrupo) {
        this.cadGrupo = cadGrupo;
    }

    /**
     * @return the registros
     */
    public int getRegistros() {
        return registros;
    }

    /**
     * @param registros the registros to set
     */
    public void setRegistros(int registros) {
        this.registros = registros;
    }

    /**
     * @param view
     * @param nomeContato
     */
    public void filtraGrupoPorNomeContato(View view, String nomeContato) {
        List<Grupo> l = gdao.filtrarGruposPorContatoNome(nomeContato);
        atualizaTblGrupos(view, l);
        atualizaCampoPesquisa(view, nomeContato);
    }

    /**
     * @param view
     * @param aniversario
     */
    public void filtraGrupoPorAniversarioContato(View view, String aniversario) {
        List<Grupo> l = gdao.filtrarGruposPorContatoAniversario(aniversario);
        atualizaTblGrupos(view, l);
        atualizaCampoPesquisa(view, aniversario);
    }

    /**
     * @param view
     * @param celular
     */
    public void filtraGrupoPorCelularContato(View view, String celular) {
        List<Grupo> l = gdao.filtrarGruposPorContatoCelular(celular);
        atualizaTblGrupos(view, l);
        atualizaCampoPesquisa(view, celular);
    }

    /**
     * @param view
     * @param l
     */
    private void atualizaTblGrupos(View view, List l) {
        JTable tblGrupo = view.getTblGrupo();
        ListagemGrupo listagem = new ListagemGrupo(l);
        tblGrupo.setModel(listagem);
        view.getLbTotalGrupo().setText("Total encontrado.: " + l.size());
    }

    /**
     *
     * @param view
     * @param valor
     */
    private void atualizaCampoPesquisa(View view, String valor) {
        view.getTfpesquisarPrincipal().setText(valor);
        view.getTfpesquisarGrupos().setText(valor);
        view.getTfpesquisarMensagens().setText(valor);
        view.getTfpesquisarAgendadas().setText(valor);
        view.getTfpesquisarContatos().setText(valor);
        view.getTfpesquisarEstatisticas().setText(valor);
    }

    void filtraGrupoPorNome(View view, String text) {
        List<Grupo> l = gdao.filtrarGruposPorNome(text);
        atualizaTblGrupos(view, l);
        atualizaCampoPesquisa(view, text);
    }

    void filtraTodosGrupos(View view) {
        List<Grupo> l = gdao.buscarTodos();
        atualizaTblGrupos(view, l);
    }
}
